home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / LispExample / lispEvaluate.m < prev    next >
Text File  |  1995-06-12  |  2KB  |  87 lines

  1.  
  2. #import <appkit/Listener.h>
  3. #include <stdio.h>
  4. #import <servers/netname.h>
  5. extern port_t       name_server_port;
  6.  
  7. int send_message(port_t send_port, char *selector, char *string_argument)
  8. {
  9.     static NXMessage msg_buf[MSG_SIZE_MAX];
  10.     NXMessage *send_msg = msg_buf;
  11.     int err,len, moffset, msize;
  12.     msg_type_t *st;
  13.  
  14.     send_msg->header.msg_type = MSG_TYPE_NORMAL;
  15.     send_msg->header.msg_id = NX_SELECTORPMSG;
  16.     send_msg->header.msg_simple = TRUE;
  17.     send_msg->header.msg_remote_port = send_port;
  18.     send_msg->header.msg_local_port = PORT_NULL;
  19.  
  20.     send_msg->sequenceType.msg_type_name = MSG_TYPE_INTEGER_32;
  21.     send_msg->sequenceType.msg_type_size = sizeof(int) * 8;
  22.     send_msg->sequenceType.msg_type_number = 1;
  23.     send_msg->sequenceType.msg_type_inline = TRUE;
  24.     send_msg->sequenceType.msg_type_longform = FALSE;
  25.     send_msg->sequenceType.msg_type_deallocate = FALSE;
  26.  
  27.     send_msg->actionType.msg_type_name = MSG_TYPE_BYTE;
  28.     send_msg->actionType.msg_type_size = 8;
  29.     send_msg->actionType.msg_type_inline = TRUE;
  30.     send_msg->actionType.msg_type_longform = FALSE;
  31.     send_msg->actionType.msg_type_deallocate = FALSE;
  32.  
  33.     send_msg->sequence = 1;
  34.  
  35.     len = strlen(selector) + 1;
  36.     send_msg->actionType.msg_type_number = len;
  37.     bcopy(selector, send_msg->action, len);
  38.  
  39.     moffset = (int)(send_msg->action - (char *)send_msg) + ((len + 3) / 4) * 4;
  40.     msize = moffset + sizeof(msg_type_t) + ((len + 3) / 4);
  41.  
  42.     st = (msg_type_t *)((char *)send_msg + moffset);
  43.     st->msg_type_inline = TRUE;
  44.     st->msg_type_longform = FALSE;
  45.     st->msg_type_deallocate = FALSE;
  46.  
  47.     len = strlen(string_argument) + 1;
  48.     st->msg_type_name = MSG_TYPE_BYTE;
  49.     st->msg_type_size = 8;
  50.     st->msg_type_number = len;
  51.     bcopy(string_argument, ((char *)st + sizeof(msg_type_t)), len);
  52.  
  53.     send_msg->header.msg_size = ((char *)st-(char *)send_msg) +
  54.                     sizeof(msg_type_t) + ((len + 3) / 4) * 4;
  55.     return msg_send(send_msg,SEND_TIMEOUT,30*1000); /* thirty sec timeout */
  56. }
  57.  
  58. #define BUFSIZE (4096)
  59.  
  60. main()
  61. {
  62.     char buf[BUFSIZE], *p = buf;
  63.     port_t send_port;
  64.     int i, err = netname_look_up(name_server_port, "", "Lisp", &send_port);
  65.     if (err) exit(1);
  66.     while (1) {
  67.     for (i=0; i<(BUFSIZE-2); i++) {
  68.         if ((*p++=getchar()) == EOF) {
  69.         p--;
  70.         break;
  71.         }
  72.     }
  73.     if (p[-1] != '\n')
  74.         *p++ = '\n';
  75.     *p = '\0';
  76.     if (buf[0]) {
  77.         err = send_message(send_port,"appEvaluate:",buf);
  78.         if (err) exit(1);
  79.     }
  80.     if (i != (BUFSIZE-2))
  81.         exit(0);
  82.     }
  83. }
  84.  
  85.  
  86.  
  87.